# 包管理器对比

https://zhuanlan.zhihu.com/p/526257537

主要就是围绕node_module的治理

比如:

幽灵依赖:没安装却可以使用(采用扁平化导致)

依赖分身:多个包依赖同一个包,但是版本不同,会导致每个包下面都有那个依赖的包

yarn主要就是加了lock文件,可以锁定版本

pnpm则是将所有依赖装到电脑的全局store中,项目中全是通过链接的方式。

结构如下

node_modules
├── .pnpm
│   ├── A@1.0.0
│   │   └── node_modules
│   │       ├── A => <store>/A@1.0.0
│   │       └── B => ../../B@1.0.0
│   ├── B@1.0.0
│   │   └── node_modules
│   │       └── B => <store>/B@1.0.0
│   ├── B@2.0.0
│   │   └── node_modules
│   │       └── B => <store>/B@2.0.0
│   └── C@1.0.0
│       └── node_modules
│           ├── C => <store>/C@1.0.0
│           └── B => ../../B@2.0.0
│
├── A => .pnpm/A@1.0.0/node_modules/A
└── C => .pnpm/C@1.0.0/node_modules/C